iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
DevOps

連DevSecOps都不知道怎麼發音怎麼開始學習?系列 第 4

Day.4 世界線穩定化:零件清單(套件管理)與快取機制

  • 分享至 

  • xImage
  •  

昨天我們把 GitHub Actions 當成「世界線檢查機構」,只要有人 push 程式碼,就會自動檢查「世界線是否崩壞」
但是我在世界線檢查機構裡,直接按下啟動鍵,結果轟!失敗了
為什麼?因為我忘了帶上必要的零件(pytest)

昨天發布的正式文章是正常的,請放心食用

沒有零件的時空跳躍機,就跟沒有 Dr.Pepper 的岡部倫太郎一樣,根本轉不動

所以今天我們要來談談套件(packages)管理 + 快取(cache)加速,確保世界線檢查不會卡住

1.為什麼要做套件管理?

在 Python 裡,套件就像是時空跳躍用的零件
沒安裝 → 機器沒法運作
版本亂掉 → 結果不一致,可能在你電腦能跑,在CI就掛掉
因此我們要用 requirements.txt 記錄套件清單
在CI自動安裝,確保每次檢查都能重現一樣的環境

讓我們來看看昨天怎麼把世界線檢查機構搭建起來的吧
跟**.github/workflows/ci.yml**對照看

2.世界線檢查機構升級:套件管理

假設我要在本地安裝pytest這個套件

pip install pytest #如果有多python版本也許是pip3

下載完可以檢查是否有正確安裝

pip list

如果有正確安裝到應該會出現在列表中

Package           Version
----------------- -------
pip               25.2
pytest            8.4.1

版本不同是正常的,因為pip預設會安裝最新版本
很多人卡在環境建置就是因為只要某套件有更新
就可能發生跟其他套件產生衝突的情況

如同跳躍裝置不是隨便拼拼湊湊的,要有完整清單,才能保證每次重現同樣的世界線
這清單在Python裡就是 requirements.txt

如果你在本地能跑成功,想要把套件一鍵同步到requirements.txt裡再傳到其他機器執行
只要輸入這個指令即可

pip freeze > .\requirements.txt

如果要指定版本就編輯requirements.txt

pytest==8.4.1

在 .github/workflows/ci.yml 裡,把裝零件的步驟加進去:

      - name: 安裝套件
        run: pip install -r requirements.txt

這樣每次跳躍前,系統都會自動檢查清單,先把零件裝好再出發

3. 加速世界線檢查:pip cache

問題來了:每次安裝套件都要重新下載,特別是專案一多,CI 跑超慢
每次跳躍前都要重新下載零件

而解法就是快取,就像在研究所地下室建了一個「備用零件倉庫」,下次要跳躍就直接拿,不用再等工廠生產

在 workflow 加一段 cache:

      - name: Cache pip
        uses: actions/cache@v3
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
          restore-keys: |
            ${{ runner.os }}-pip-

意思:

  • 把 pip 套件下載的結果存起來
  • 如果 requirements.txt 沒變,就用快取
  • 如果有變,重新下載並更新快取

確認快取機制運行狀況

第一次 CI 還是會慢一點,因為要下載
但之後再 push,你會看到 log 裡有:

這表示世界線跳躍直接調用了快取機制,速度起飛

4.總結

今天,我們讓世界線檢查機構變得更穩
零件清單 (requirements.txt) → 確保環境一致,不再少零件
備用零件倉庫 (cache) → 減少等待,加快世界線檢查
到這裡,我們已經擁有一個「最小世界線守護者」


上一篇
Day.3 世界線檢查機構啟動!用GitHub Actions守護未來(CI/CD)
下一篇
Day.5 世界線清理者: 使用Lint檢查程式碼及程式碼格式化
系列文
連DevSecOps都不知道怎麼發音怎麼開始學習?22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言